home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_02_04 / 2n04059a < prev    next >
Text File  |  1991-01-26  |  2KB  |  49 lines

  1. ; RdKey to replace Turbo Pascal's ReadKey with a
  2. ; function that (1) doesn't require clearing before
  3. ; reuse after a call that yields ch = #0 and (2)
  4. ; differentiates pairs such as BackSpace and Ctrl-h.
  5. ;
  6. ; Implemented as a Turbo Pascal external function
  7. ; in assembly. (Assembled in TASM 1.0 & MASM 5.0.)
  8.  
  9.                       page   56,132
  10.                       title  function RdKey (TP5.x)
  11.  
  12.  
  13. cseg     segment  public
  14.          assume cs:cseg, es:nothing
  15.  
  16. RdKey    proc    far
  17.          public  RdKey
  18.  
  19.          mov     bx,bp                  ; save bp
  20.          mov     bp,sp
  21.  
  22.          ; get key, get pointer to "variable : KeyRec"
  23.          ; and test for ascii code = 0.
  24.          mov     ah, 0                  ; get key
  25.          int     16h
  26.          les     di,dword ptr [bp+4]
  27.          and     al, al                 ; test for ascii 0
  28.          jz      short SpecKey          ; yes, ascii 0
  29.  
  30.          ; ascii code <> 0, put ascii code into .ch and
  31.          ; scan code into .sc. Fn result already in al.
  32.          mov     es:byte ptr [di], al   ; ascii into .ch
  33.          inc     di
  34.          mov     es:byte ptr [di], ah   ; scan into .sc
  35.          mov     bp, bx
  36.          retf    4
  37.  
  38. SpecKey:
  39.          ; ascii code = 0, put scan code into .ch and 0 into
  40.          ; .sc. Function result already in al.
  41.          mov     es:byte ptr [di], ah   ; scan into .ch
  42.          inc     di
  43.          mov     es:byte ptr [di], 0    ; 0 into .sc
  44.          mov     bp,bx
  45.          retf    4
  46. RdKey    endp
  47. cseg     ends
  48.          end
  49.